package lock;

import java.util.concurrent.locks.LockSupport;

public class LockDemo {
    public static void main(String[] args) throws Exception{
        Thread t1 = new Thread(() -> {
            System.out.println(Thread.currentThread().getName() + "\t" + "coming....");
//            LockSupport.park();//本线程A挂起

            /*
            如果这里有两个LockSupport.park(),因为permit的值为1,上一行已经使用了permit
            所以下一行被注释的打开会导致程序处于一直等待的状态
            * */
            System.out.println("挂起后这段代码不会执行");
            System.out.println("unpark唤醒后才会执行");

        }, "A");

        LockSupport.unpark(t1);
        LockSupport.park(t1);
        System.out.println("====");
        t1.start();

//        Thread t2 = new Thread(() -> {
//            System.out.println(Thread.currentThread().getName() + "\t" + "唤醒A线程");
//            //有两个LockSupport.unpark(t1),由于permit的值最大为1,所以只能给park一个通行证
////            LockSupport.unpark(t1);
//            LockSupport.unpark(t1);
//        }, "B");
//        t2.start();
//        t2.join();
//        t1.start();
    }


}

